package com.gitee.qdbp.general.marketing.api.activity.model;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import com.gitee.qdbp.able.jdbc.paging.PartList;
import com.gitee.qdbp.base.annotation.DataIsolation;
import com.gitee.qdbp.base.annotation.OperateTraces;
import com.gitee.qdbp.base.enums.DataState;

/**
 * 奖品主实体类
 *
 * @author zhh
 * @version 181114
 */
@OperateTraces(id = "id")
@DataIsolation(enable = false)
public class AwardCoreBean implements Serializable {

    /** 版本序列号 **/
    private static final long serialVersionUID = 1L;

    /** 表名 **/
    public static final String TABLE = "aty_award_core";

    /** 奖品编号 **/
    private String id;

    /** 奖品名称 **/
    private String awardName;

    /** 奖品描述 **/
    private String awardIntro;

    /** 市场价格 **/
    private String marketPrice;

    /** 是否支持在线派奖 **/
    private Boolean supportOnlineDelivery;

    /** 创建时间 **/
    private Date createTime;

    /** 选项 **/
    private AwardCoreOptions options;

    /** 数据状态:0为正常|其他为删除 **/
    private DataState dataState;

    /** 获取奖品编号 **/
    public String getId() {
        return id;
    }

    /** 设置奖品编号 **/
    public void setId(String id) {
        this.id = id;
    }

    /** 获取奖品名称 **/
    public String getAwardName() {
        return awardName;
    }

    /** 设置奖品名称 **/
    public void setAwardName(String awardName) {
        this.awardName = awardName;
    }

    /** 获取奖品描述 **/
    public String getAwardIntro() {
        return awardIntro;
    }

    /** 设置奖品描述 **/
    public void setAwardIntro(String awardIntro) {
        this.awardIntro = awardIntro;
    }

    /** 获取市场价格 **/
    public String getMarketPrice() {
        return marketPrice;
    }

    /** 设置市场价格 **/
    public void setMarketPrice(String marketPrice) {
        this.marketPrice = marketPrice;
    }

    /** 获取是否支持在线派奖 **/
    public Boolean getSupportOnlineDelivery() {
        return supportOnlineDelivery;
    }

    /** 设置是否支持在线派奖 **/
    public void setSupportOnlineDelivery(Boolean supportOnlineDelivery) {
        this.supportOnlineDelivery = supportOnlineDelivery;
    }

    /** 获取创建时间 **/
    public Date getCreateTime() {
        return createTime;
    }

    /** 设置创建时间 **/
    public void setCreateTime(Date createTime) {
        this.createTime = createTime;
    }

    /** 获取选项 **/
    public AwardCoreOptions getOptions() {
        return options;
    }

    /** 获取选项, force=是否强制返回非空对象 **/
    public AwardCoreOptions getOptions(boolean force) {
        if (options == null && force) {
            options = new AwardCoreOptions();
        }
        return options;
    }

    /** 设置选项 **/
    public void setOptions(AwardCoreOptions options) {
        this.options = options;
    }

    /** 获取数据状态:0为正常|其他为删除 **/
    public DataState getDataState() {
        return dataState;
    }

    /** 设置数据状态:0为正常|其他为删除 **/
    public void setDataState(DataState dataState) {
        this.dataState = dataState;
    }

    /**
     * 将当前对象转换为子类对象
     *
     * @param clazz 目标类型
     * @return 目标对象
     */
    public <T extends AwardCoreBean> T to(Class<T> clazz) {
        T instance;
        try {
            instance = clazz.newInstance();
        } catch (Exception e) {
            throw new IllegalArgumentException("Failed to create " + clazz.getSimpleName() + " instance.", e);
        }

        instance.setId(this.getId()); // 奖品编号
        instance.setAwardName(this.getAwardName()); // 奖品名称
        instance.setAwardIntro(this.getAwardIntro()); // 奖品描述
        instance.setMarketPrice(this.getMarketPrice()); // 市场价格
        instance.setSupportOnlineDelivery(this.getSupportOnlineDelivery()); // 是否支持在线派奖
        instance.setCreateTime(this.getCreateTime()); // 创建时间
        instance.setOptions(this.getOptions()); // 选项
        instance.setDataState(this.getDataState()); // 数据状态:0为正常|其他为删除
        return instance;
    }

    /**
     * 将AwardCoreBean转换为子类对象
     *
     * @param beans 待转换的对象列表
     * @param clazz 目标类型
     * @param <T> AwardCoreBean或子类
     * @param <C> T的子类
     * @return 目标对象列表
     */
    public static <T extends AwardCoreBean, C extends T> List<C> to(List<T> beans, Class<C> clazz) {
        if (beans == null) {
            return null;
        }
        List<C> list;
        if (beans instanceof PartList) {
            PartList<C> partlist = new PartList<>();
            partlist.setTotal(((PartList<?>) beans).getTotal());
            list = partlist;
        } else {
            list = new ArrayList<>();
        }
        for (AwardCoreBean bean : beans) {
            list.add(bean.to(clazz));
        }
        return list;
    }

}